68 Input() : mObject(
nullptr), mIndex(0), mSize(0), mFixedInput(
nullptr), mType(
kFrameNormal), mUpdate(
false),
mParameters(
false), mTrigger(
true), mSwitchable(
false) {}
70 FrameType getCurrentType()
const {
return mObject ? mObject->mOutputs[mIndex].mCurrentType :
kFrameNormal; }
110 size_t mRequestedSize;
111 size_t mPointerOffset;
128 void setFixedInput(
unsigned long idx,
double *input,
unsigned long size)
final;
129 const double *
getFixedInput(
unsigned long idx,
unsigned long *size)
final;
134 void reset(
double samplingRate,
unsigned long maxBlockSize)
final;
154 void setIO(
unsigned long nIns,
unsigned long nOuts,
unsigned long nAudioChans = 0);
172 bool isTrigger(
unsigned long idx)
const {
return mInputs[idx].mTrigger && mInputs[idx].mObject && (mInputs[idx].mObject->mFrameTime == mFrameTime); }
195 const double *
getInput(
unsigned long idx,
size_t *size)
const;
199 double *
getOutput(
unsigned long idx,
size_t *size)
const;
207 static void copyVector(
double *output,
const double *input,
unsigned long size) { std::copy(input, input + size, output); }
208 static void zeroVector(
double *output,
unsigned long size) { std::fill_n(output, size, 0.0); }
210 static void copyVectorExtend(
double* output,
const double *input,
unsigned long sizeOut,
unsigned long sizeIn)
212 copyVector(output, input, std::min(sizeIn, sizeOut));
213 std::fill_n(output + sizeIn, (sizeOut > sizeIn) ? sizeOut - sizeIn : 0, input[sizeIn - 1]);
216 static void copyVectorWrap(
double* output,
const double *input,
unsigned long sizeOut,
unsigned long sizeIn)
218 unsigned long excess = sizeOut % sizeIn;
220 for (
unsigned long i = 0; i < (sizeOut - excess); i += sizeIn)
223 copyVector(output + (sizeOut - excess), input, excess);
226 static void copyVectorZero(
double* output,
const double *input,
unsigned long sizeOut,
unsigned long sizeIn)
228 copyVector(output, input, std::min(sizeIn, sizeOut));
229 zeroVector(output + sizeIn, (sizeOut > sizeIn) ? sizeOut - sizeIn : 0);
246 void reset(LocalQueue *queue);
252 virtual void blockProcess(
const double *
const *ins,
double **outs,
unsigned long blockSize) {}
256 virtual void objectReset() {}
260 virtual void update() {}
264 virtual SchedulerInfo schedule(
bool newFrame,
bool noAdvance) = 0;
268 virtual void process() = 0;
278 inline void freeOutputMemory();
279 inline void releaseOutputMemory();
283 inline void dependencyNotify(
bool releaseMemory,
bool fromInput);
284 void dependenciesReady();
285 void setOutputDependencyCount();
286 void incrementInputDependency();
290 void connectionUpdate(Queue *queue)
final;
315 std::vector<FrameLib_DSP *> mInputDependencies;
316 std::vector<FrameLib_DSP *> mOutputDependencies;
318 std::vector<Input> mInputs;
319 std::vector<Output> mOutputs;
324 long mDependencyCount;
325 long mOutputMemoryCount;
335 bool mUpdatingInputs;
ObjectType
Definition: FrameLib_Types.h:53
static bool handlesAudio()
Definition: FrameLib_DSP.h:427
FrameLib_TimeFormat msToSamples(const FrameLib_TimeFormat &a)
Definition: FrameLib_DSP.h:235
FrameType outputType(unsigned long idx) const final
Definition: FrameLib_DSP.h:141
void reset(double samplingRate, unsigned long maxBlockSize) final
Definition: FrameLib_DSP.cpp:74
Definition: FrameLib_Types.h:53
FrameType getOutputCurrentType(unsigned long idx) const
Definition: FrameLib_DSP.h:198
a set of parameters for a FrameLib object.
Definition: FrameLib_Parameters.h:30
double hzToSamples(double a)
Definition: FrameLib_DSP.h:238
bool allocateOutputs()
Definition: FrameLib_DSP.cpp:210
Definition: FrameLib_Types.h:54
a class used to represent distinct non-connectable areas in the host environment. ...
Definition: FrameLib_Context.h:21
FrameLib_TimeFormat getInputFrameTime(unsigned long idx) const
Definition: FrameLib_DSP.h:183
const double * getInput(unsigned long idx, size_t *size) const
Definition: FrameLib_DSP.cpp:270
void blockUpdate(const double *const *ins, double **outs, unsigned long blockSize) final
Definition: FrameLib_DSP.cpp:58
static void zeroVector(double *output, unsigned long size)
Definition: FrameLib_DSP.h:208
static bool handlesAudio()
Definition: FrameLib_DSP.h:363
void setParameterInput(unsigned long idx)
Definition: FrameLib_DSP.cpp:165
a set of tagged parameter values using external non-owned memory.
Definition: FrameLib_Parameters.h:51
FrameLib_TimeFormat getBlockEndTime() const
Definition: FrameLib_DSP.h:181
FrameLib_TimeFormat getCurrentTime() const
Definition: FrameLib_DSP.h:179
an abstract class containing the core of the DSP processing system, which handles single-stream sched...
Definition: FrameLib_DSP.h:25
static bool handlesAudio()
Definition: FrameLib_DSP.h:458
FrameLib_TimeFormat mTimeAdvance
Definition: FrameLib_DSP.h:51
a virtual struct allowing for extensible communication to/from the host environment.
Definition: FrameLib_Types.h:69
void setInputMode(unsigned long idx, bool update, bool trigger, bool switchable, FrameType type=kFrameNormal)
Definition: FrameLib_DSP.cpp:155
a convenience class for creating scheduler type FrameLib_DSP classes.
Definition: FrameLib_DSP.h:449
static void copyVector(double *output, const double *input, unsigned long size)
Definition: FrameLib_DSP.h:207
static ObjectType getType()
Definition: FrameLib_DSP.h:362
a template class for items that can be placed on a queue
Definition: FrameLib_Object.h:29
const FrameLib_Parameters * getParameters() const final
Definition: FrameLib_DSP.h:138
FrameLib_TimeFormat getFrameTime() const
Definition: FrameLib_DSP.h:176
ObjectType getType() const
Definition: FrameLib_Object.h:204
FrameLib_Processor(FrameLib_Context context, FrameLib_Proxy *proxy, FrameLib_Parameters::Info *info, unsigned long nIns=0, unsigned long nOuts=0)
Definition: FrameLib_DSP.h:359
FrameType inputType(unsigned long idx) const final
Definition: FrameLib_DSP.h:140
a struct for returning scheduling info from the schedule() method.
Definition: FrameLib_DSP.h:43
const double * getFixedInput(unsigned long idx, unsigned long *size) final
Definition: FrameLib_DSP.cpp:48
FrameLib_TimeFormat getBlockStartTime() const
Definition: FrameLib_DSP.h:180
FrameLib_AudioOutput(FrameLib_Context context, FrameLib_Proxy *proxy, FrameLib_Parameters::Info *info, unsigned long nIns=0, unsigned long nOuts=0, unsigned long nAudioOuts=0)
Definition: FrameLib_DSP.h:423
void setCurrentOutputType(unsigned long idx, FrameType type)
Definition: FrameLib_DSP.cpp:194
FrameLib_TimeFormat getInputTime() const
Definition: FrameLib_DSP.h:178
virtual SchedulerInfo schedule(bool newFrame, bool noAdvance)
Definition: FrameLib_DSP.h:369
double mSamplingRate
Definition: FrameLib_DSP.h:299
FrameLib_DSP(ObjectType type, FrameLib_Context context, FrameLib_Proxy *proxy, FrameLib_Parameters::Info *info, unsigned long nIns, unsigned long nOuts, unsigned long nAudioChans=0)
Definition: FrameLib_DSP.cpp:6
void requestAddedOutputSize(unsigned long idx, size_t size)
Definition: FrameLib_DSP.h:189
void setOutputType(unsigned long idx, FrameType type)
Definition: FrameLib_DSP.cpp:185
virtual SchedulerInfo schedule(bool newFrame, bool noAdvance)
Definition: FrameLib_DSP.h:433
FrameLib_Parameters mParameters
Definition: FrameLib_DSP.h:304
void clearAutoOrderingConnections() final
Definition: FrameLib_DSP.cpp:643
double secondsToSamples(double a)
Definition: FrameLib_DSP.h:240
FrameType getInputCurrentType(unsigned long idx) const
Definition: FrameLib_DSP.h:194
double msToSamples(double a)
Definition: FrameLib_DSP.h:239
FrameLib_Scheduler(FrameLib_Context context, FrameLib_Proxy *proxy, FrameLib_Parameters::Info *info, unsigned long nIns=0, unsigned long nOuts=0, unsigned long nAudioIns=0)
Definition: FrameLib_DSP.h:454
a minimal processing queue that is used to non-recursively process FrameLIB_DSP objects in a network...
Definition: FrameLib_ProcessingQueue.h:30
void addParameterInput()
Definition: FrameLib_DSP.cpp:173
void requestOutputSize(unsigned long idx, size_t size)
Definition: FrameLib_DSP.h:188
SchedulerInfo()
Definition: FrameLib_DSP.h:45
void copyInputToOutput(unsigned long inIdx, unsigned long outIdx)
Definition: FrameLib_DSP.cpp:325
bool mNewFrame
Definition: FrameLib_DSP.h:52
double * getOutput(unsigned long idx, size_t *size) const
Definition: FrameLib_DSP.cpp:287
virtual void process()
Definition: FrameLib_DSP.h:464
void updateTrigger(unsigned long idx, bool trigger)
Definition: FrameLib_DSP.cpp:201
FrameLib_TimeFormat hzToSamples(const FrameLib_TimeFormat &a)
Definition: FrameLib_DSP.h:234
static ObjectType getType()
Definition: FrameLib_DSP.h:457
FrameLib_TimeFormat getInputValidTime(unsigned long idx) const
Definition: FrameLib_DSP.h:184
void prepareCopyInputToOutput(unsigned long inIdx, unsigned long outIdx)
Definition: FrameLib_DSP.cpp:309
an abstract class that represents either a single FrameLib_DSP object, or a group of connected FrameL...
Definition: FrameLib_Object.h:931
void setIO(unsigned long nIns, unsigned long nOuts, unsigned long nAudioChans=0)
Definition: FrameLib_DSP.cpp:133
size_t blockSize(void *ptr)
Definition: FrameLib_Memory.cpp:23
a class for passing info strings to FrameLib_Parameters.
Definition: FrameLib_Parameters.h:282
a convenience class for creating processor FrameLib_DSP classes that do not handle audio...
Definition: FrameLib_DSP.h:354
SchedulerInfo(FrameLib_TimeFormat timeAdvance, bool newFrame, bool outputDone)
Definition: FrameLib_DSP.h:48
FrameLib_TimeFormat secondsToSamples(const FrameLib_TimeFormat &a)
Definition: FrameLib_DSP.h:236
unsigned long mMaxBlockSize
Definition: FrameLib_DSP.h:300
a convenience class for creating processor type FrameLib_DSP classes which handle audio output...
Definition: FrameLib_DSP.h:418
void autoOrderingConnections() final
Definition: FrameLib_DSP.cpp:628
static ObjectType getType()
Definition: FrameLib_DSP.h:426
void setFixedInput(unsigned long idx, double *input, unsigned long size) final
Definition: FrameLib_DSP.cpp:30
FrameLib_TimeFormat getValidTime() const
Definition: FrameLib_DSP.h:177
void setIO(unsigned long nIns, unsigned long nOuts)
Definition: FrameLib_DSP.h:371
unsigned long getNumAudioIns() const
Definition: FrameLib_Object.h:218
FrameLib_DSP & operator=(const FrameLib_DSP &)=delete
Definition: FrameLib_Types.h:53
bool mOutputDone
Definition: FrameLib_DSP.h:53
FrameType
Definition: FrameLib_Types.h:54
static void copyVectorExtend(double *output, const double *input, unsigned long sizeOut, unsigned long sizeIn)
Definition: FrameLib_DSP.h:210
ManagedPointer< FrameLib_ProcessingQueue, &Global::getProcessingQueue, &Global::releaseProcessingQueue > ProcessingQueue
Definition: FrameLib_Context.h:104
Definition: FrameLib_Types.h:53
~FrameLib_DSP()
Definition: FrameLib_DSP.cpp:16
static void copyVectorZero(double *output, const double *input, unsigned long sizeOut, unsigned long sizeIn)
Definition: FrameLib_DSP.h:226
bool isTrigger(unsigned long idx) const
Definition: FrameLib_DSP.h:172
static void copyVectorWrap(double *output, const double *input, unsigned long sizeOut, unsigned long sizeIn)
Definition: FrameLib_DSP.h:216